//
//  LWStatusPictureCollectionView.swift
//  LW_Weibo
//
//  Created by 刘伟 on 16/7/15.
//  Copyright © 2016年 LWSpro. All rights reserved.
//

import UIKit

//  每个item之间的间距
private let itemMargin: CGFloat = 5

//  每个item的宽度
private let itemWidth: CGFloat = (SCreenWidth - 2 * HomeCellMargin - 2 * itemMargin) / 3

//重用标志
private let PictureViewCellIdentifier = "PictureViewCellIdentifier"


class LWStatusPictureCollectionView: UICollectionView {

    
    
    //需要数据  这样可以赋值  外界传值进来 我就赋值
   var pic_urls: [LWStatusPictureInfo]? {
        
        didSet{
        
            pictureNumLabel.text = "\(pic_urls?.count ?? 0)"
            
            
            let size = calcPictureCollectionViewSize(pic_urls?.count ?? 0)
            
        self.snp_updateConstraints { (make) -> Void in
            
            make.size.equalTo(size)
            
            
            }
        
            
            //重新加载数据
            self.reloadData()
        
        }
        
        
    }
    
    
    
    override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
        
        let flowLayout = UICollectionViewFlowLayout()
        
        
        
        flowLayout.itemSize = CGSize(width: itemWidth, height: itemWidth)
        
        //每个item的行间距  水平间距
        flowLayout.minimumInteritemSpacing = itemMargin
        
        //每个item的列间距  垂直间距
        flowLayout.minimumLineSpacing = itemMargin
        
        
        super.init(frame: frame, collectionViewLayout: flowLayout)
        
        
        aboutCollectionViewAndLayoutUI()
        
        
    }
    
    

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    
    
    
    
    
    
    //MARK: - 计算LWStatusPictureCollectionView的Size
    //根据传过来的数据中的图片数目 来确定LWStatusPictureCollectionView的宽高  这个逻辑可以放在viewModel  但是如果放在viewModel中 那么就有个问题了 因为原创微博和转发微博的配图的pic_urls数组 是各自的  如果把逻辑放在viewModel中 那么还需要判断到底是原创微博的pic_urls  还是转发微博的pic_urls  就比较麻烦了   所以还是放在这里  给一个pic_urls数组属性 根据外面谁传进来的pic_urls  来进行逻辑运算 这样就不需要判断了
    
    //MARK: - 计算配图视图的宽高
    private func calcPictureCollectionViewSize(count: Int) -> CGSize {
        
        //一行多少个图片 即列数
        let cols = count > 3 ? 3 : count
        
        //有多少行 行数
        let rows = (count - 1) / 3 + 1
        
        
        //计算每个item的宽度 宽度等于高度 设置成全局变量了
        
        let picViewWidth = itemWidth * CGFloat(cols) + itemMargin * CGFloat(cols - 1)
        
        let picViewHeight = itemWidth * CGFloat(rows) + CGFloat(rows - 1) * itemMargin
        
        
        let picViewSize = CGSize(width: picViewWidth, height: picViewHeight)
        
        
        return picViewSize
        
    }

    
    
    
    
    
    
    
        
    //MARK: - 懒加载视图中间的Label
    //label 用于显示有多少张图片
    private lazy var pictureNumLabel: UILabel = {
    
        let pictureNumLabel = UILabel(textColor: UIColor.orangeColor(), titleFont: 30)
        
        
        return pictureNumLabel
    
    }()
    
    
    
    
    //MARK: - 约束
    private func aboutCollectionViewAndLayoutUI() {
        
        //注册cell
        registerClass(LWPictureCollectionViewCell.self, forCellWithReuseIdentifier: PictureViewCellIdentifier)
        
        
        //数据源
       dataSource = self
        
        
        addSubview(pictureNumLabel)
        
        //约束
        pictureNumLabel.snp_makeConstraints { (make) -> Void in
            
            make.center.equalTo(self)
            
        }
        
        
    }
    
    

}




//MARK: - 数据源方法
extension LWStatusPictureCollectionView: UICollectionViewDataSource {
    
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        
        return pic_urls?.count ?? 0
        
    }
    
    
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(PictureViewCellIdentifier, forIndexPath: indexPath) as! LWPictureCollectionViewCell
        
        
        
        cell.picurlsInfo = pic_urls?[indexPath.row]
        
        
        
        return cell
        
    }
    
    
}








class LWPictureCollectionViewCell: UICollectionViewCell {
    
    
    
    //MARK: - 懒加载
    private lazy var pictureImageView: UIImageView = {
    
        let picImageView = UIImageView(image: UIImage(named: "timeline_image_placeholder"))
        
        //保证是原始图片模式  图片会超出 把超出的部分剪切掉
        picImageView.contentMode = UIViewContentMode.ScaleAspectFill
        
        //剪掉超出的部分
        picImageView.clipsToBounds = true
        
    
        return picImageView
        
    
    }()
    
    
    //gif图片的标记图
    private lazy var gifImageView: UIImageView = UIImageView(image: UIImage(named: "timeline_image_gif"))
    
    
    var picurlsInfo: LWStatusPictureInfo? {
        
        didSet {
            
            if let imageUrl = picurlsInfo?.thumbnail_pic {
                
                //赋值
                pictureImageView.sd_setImageWithURL(NSURL(string: imageUrl), placeholderImage: UIImage(named: "timeline_image_placeholder"))
                
              /*
                //显示还是隐藏gif  第一种方式
                if imageUrl.hasSuffix(".gif") {
                    
                    //显示
                    gifImageView.hidden = false
                    
                }else {
                    
                    //隐藏
                    gifImageView.hidden = true
                    
                }
                
                */
                
                
                //如果是以".gif"结尾  那么就显示gif标志
                gifImageView.hidden = !imageUrl.hasSuffix(".gif")
                
            }
 
        }

    }
    
    
    
    
    override init(frame:CGRect) {
        
        super.init(frame: frame)
        
        layoutUI()
        
        
    }

    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    
    
    //MARK: - 添加约束
    func layoutUI() {
        
        contentView.addSubview(pictureImageView)
        contentView.addSubview(gifImageView)
        
        //图片约束
        pictureImageView.snp_makeConstraints { (make) -> Void in
            
            
            make.edges.equalTo(contentView).offset(UIEdgeInsetsZero)
            
            
        }
        
        
        //gif标记约束
        gifImageView.snp_makeConstraints { (make) -> Void in
            
            make.trailing.bottom.equalTo(pictureImageView)
            
            
        }
        
        
        
    }
    
    
    
}






